<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // 浅拷贝
    // var arr = ['old', 1, true, null, undefined];
    // 可以使用concat跟slice
    // var newArr = arr.concat()
    // var newArr = arr.slice(0)
    // newArr[0] = 'new';
    // console.log(newArr)
    // console.log(arr)


    // let arr = [
    //     {name:'diluke'},
    //     {name:'wendi'}
    // ]
    // 深拷贝技巧
    // 次方法不能拷贝函数
    // let newArr = JSON.parse(JSON.stringify(arr))
    // newArr[0].name = 'ganyu'
    // arr[0].name = 'xueguo'
    // console.log(newArr)
    // console.log(arr)

    // var shallowCopy = function(obj) {
    //     //只拷贝对象
    //     if(typeof obj !== 'object') return
    //         // 根据obj的类型判断是新建一个数组还是对象
    //     var newObj = obj instanceof Array ? [] : {}

    //       // 遍历obj，并且判断是obj的属性才拷贝
    //       for(var key in obj) {
    //         if(obj.hasOwnProperty(key)) {
    //             newObj[key] = obj[key]
    //         }
    //       }
    //       return newObj
    // }
    // console.log(shallowCopy([{name:'111'}]))

    // 那如何实现一个深拷贝呢？说起来也好简单，
    // 我们在拷贝的时候判断一下属性值的类型，
    // 如果是对象，我们递归调用深拷贝函数不就好了~
//     let  deepCopy = function(obj) {
//         if(typeof obj !== 'object') return
//         let newObj = obj instanceof Array ? [] : {}
//         for(var key in obj) {
//             if(obj.hasOwnProperty(key)) {
//                 newObj[key] = typeof obj[key]  == 'object' ? deepCopy(obj[key]) : obj[key]
//             }
//         }
//         return newObj
//     }
//     let obj1 = [
//         {name:'xueguo'},
//         {name:'wendi'},
//         {name:'mary'}
//     ]
//    let newObj =  deepCopy(obj1)
//    console.log(obj1)
//    newObj[0].name = 'diluke'
//   console.log(newObj)
  

// function deepClone(obj) {
//     if (typeof obj !== 'object') return
//     let result = obj instanceof Array ? [] : {}
//     for ( let key in obj) {
//         if (obj.hasOwnProperty(key)) {
//             result[key] = typeof obj[key] == 'object' ? deepClone(obj[key]) : obj[key]
//         }
//     }
//     return result
// }

// function deepClone(obj) {
//     if (typeof obj !== 'object') return
//     let result = obj instanceof Array ? [] : {}
//     for (let key in obj) {
//         if (obj.hasOwnProperty(key)) {
//             result[key] = typeof obj[key] === 'object' ? deepClone(obj[key]) : obj[key]
//         }
//     }
// }

function deepClone(obj) {
    if (typeof obj !== 'object') return
    let result = obj instanceof Array ? [] : {}
    for (let key in obj) {
        if (obj.hasOwnProperty(key)) {
            result[key] = typeof obj[key] === 'object' ? deepClone(obj[key]) : obj[key]
        }
    }
}

// let xhr = new XMLHttpRequest()
// xhr.open('get', 'example.php', false)
// xhr.send(null)


</script>
</html>